from IPython.display import Javascript, display
from ipywidgets import widgets
def run_all(ev):
display(Javascript('IPython.notebook.execute_cells_below()'))
button = widgets.Button(description="Click here to update tables + charts:")
button.on_click(run_all)
display(button)
#imports and pull from db
import pandas as pd
import numpy as np
import sqlalchemy as sa
import glob
import os
import sys
import matplotlib.pyplot as plt
import matplotlib.pylab as pylab
import plotly.plotly as py
from plotly.graph_objs import *
import datetime
%matplotlib inline
#%pylab inline
pylab.rcParams['figure.figsize'] = (15, 25)
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)
import qgrid
qgrid.nbinstall(overwrite=True)
engine = sa.create_engine('mysql+pymysql://root:@localhost/rsi?charset=utf8')
conn = engine.connect()
#cds, cells, exp, fullexp, fullprocess, ivt, ivtdfmod, mods, modtrends, process, sencera, trends, xrf
senceradf = pd.read_sql('sencera', conn, index_col="sencera_index")
processdf = pd.read_sql("process", conn, index_col="process_index")
expdf = pd.read_sql("exp", conn, index_col="exp_index")
celldf = pd.read_sql("cells", conn, index_col="cells_index")
moddf = pd.read_sql("mods", conn, index_col="mods_index")
trends = pd.read_sql("trends", conn, index_col="trends_index")
xrf = pd.read_sql("xrf", conn, index_col="xrf_index")
ivtdf = pd.read_sql("ivt", conn, index_col="ivt_index")
eddf = pd.read_sql("ed", conn, index_col="ed_index")
import time
now = time.strftime("%c")
print ("Updated at: %s" % now )
##module eff, FF, Voc, Jsc vs time
print("module trends:")
import seaborn as sns
flatui = ["#3498db", "#e74c3c", "#2ecc71", "#95a5a6", "#34495e", "#9b59b6"]
sns.set(style='ticks')
sns.set_palette(flatui)
sns.set_context("poster", font_scale=1.5,)
fg = sns.FacetGrid(moddf, hue='POR', size= 9, aspect=2.3)#, hue_kws=dict(marker=["^", "v"]))
fg.map(plt.scatter, 'Experiment_ID', 'percentEff', alpha=.7,)
plt.xlim(570,680)
plt.ylim(12, 17)
plt.axhline(15.5, color='k', linestyle='--')
plt.axhline(14.5, color='k', linestyle='--')
plt.grid(b=True, which='both', color='0.65',linestyle='-')
plt.legend()
#plt.title('mod FOM')
plt.savefig('m_eff.png')
flatui1 = ["#95a5a6", "#9b59b6","#2ecc71", "#34495e", "#3498db", "#e74c3c",]
sns.set_palette(flatui1)
fg1 = sns.FacetGrid(moddf, hue='POR', size= 9, aspect=2.3)
fg1.map(plt.scatter, 'Experiment_ID', 'percentFF', alpha=.7)
plt.xlim(570,680)
plt.ylim(50, 80)
#plt.axhline(15.5, color='k', linestyle='--')
plt.grid(b=True, which='both', color='0.65',linestyle='-')
plt.legend()
plt.savefig('m_ff.png')
flatui1 = ["#2ecc71", "#34495e", "#95a5a6", "#9b59b6", "#3498db", "#e74c3c",]
sns.set_palette(flatui1)
#fig, ax = plt.subplots(figsize=(15, 15))
# the size of A4 paper
#plt.figure(figsize=(20, 20))
fg2 = sns.FacetGrid(moddf, hue='POR', size=9, aspect=2.5)
fg2.map(plt.scatter, 'Experiment_ID', 'modJsc', alpha=.7,)
plt.xlim(570,680)
#plt.xlim([datetime.date(2015, 12, 5), datetime.date(2016, 5, 25)])
#plt.title("module Jsc")
plt.ylim(22, 29)
plt.axhline(15.5, color='k', linestyle='--')
plt.grid(b=True, which='both', color='0.65',linestyle='-')
plt.legend()
plt.savefig('m_jsc.png')
flatui1 = ["#e74c3c", "#2ecc71", "#34495e", "#95a5a6", "#9b59b6", "#3498db", "#e74c3c",]
sns.set_palette(flatui1)
fg21 = sns.FacetGrid(moddf, hue='POR', size= 9, aspect=2.5)
fg21.map(plt.scatter, 'Experiment_ID', 'modVoc', alpha=.7, )
plt.xlim(570,680)
#plt.xlim([datetime.date(2015, 12, 5), datetime.date(2016, 5, 25)])
#plt.title("module Voc")
plt.ylim(.76, .86)
#plt.axhline(15.5, color='k', linestyle='--')
plt.grid(b=True, which='both', color='0.65',linestyle='-')
plt.legend()
plt.savefig('m_voc.png')
flatui1 = ["#9b59b6","#3498db","#e74c3c", "#2ecc71", "#34495e", "#95a5a6", "#9b59b6", "#3498db", "#e74c3c",]
sns.set_palette(flatui1)
fg3 = sns.FacetGrid(moddf, hue='POR', size= 9, aspect=2.3)
fg3.map(plt.scatter, 'Experiment_ID', 'modRs', alpha=.7,)
plt.xlim(560,680)
plt.ylim(.6, 4)
plt.axhline(15.5, color='k', linestyle='--')
plt.grid(b=True, which='both', color='0.65',linestyle='-')
plt.legend()
plt.savefig('m_rs.png')
flatui1 = [ "#e74c3c","#34495e", "#95a5a6", "#9b59b6", "#3498db", "#e74c3c",]
sns.set_palette(flatui1)
fg31 = sns.FacetGrid(moddf, hue='POR', size= 9, aspect=2.3)
fg31.map(plt.scatter, 'Experiment_ID', 'modRsh', alpha=.7,)
plt.xlim(560,680)
plt.ylim(1e1, 1e5)
plt.yscale('log')
#plt.axhline(15.5, color='k', linestyle='--')
plt.grid(b=True, which='both', color='0.65',linestyle='-')
plt.legend()
plt.savefig('m_rsh.png')
##cells eff, FF, Voc, Jsc vs time
print("cell trends:")
import seaborn as sns
flatui = ["#3498db", "#e74c3c", "#2ecc71", "#95a5a6", "#34495e", "#9b59b6"]
sns.set(style='ticks')
sns.set_palette(flatui)
sns.set_context("poster", font_scale=1.5,)
fg = sns.FacetGrid(celldf, hue='POR', size= 9, aspect=2.3)#, hue_kws=dict(marker=["^", "v"]))
fg.map(plt.scatter, 'Experiment_ID', 'percentEff', alpha=.7,)
plt.xlim(570,680)
plt.ylim(12, 17)
plt.axhline(15.5, color='k', linestyle='--')
plt.axhline(14.5, color='k', linestyle='--')
plt.grid(b=True, which='both', color='0.65',linestyle='-')
plt.legend()
#plt.title('cell FOM')
plt.savefig('c_eff.png')
flatui1 = ["#95a5a6", "#9b59b6","#2ecc71", "#34495e", "#3498db", "#e74c3c",]
sns.set_palette(flatui1)
fg1 = sns.FacetGrid(celldf, hue='POR', size= 9, aspect=2.3)
fg1.map(plt.scatter, 'Experiment_ID', 'percentFF', alpha=.7)
plt.xlim(570,680)
plt.ylim(50, 80)
#plt.axhline(15.5, color='k', linestyle='--')
plt.grid(b=True, which='both', color='0.65',linestyle='-')
plt.legend()
plt.savefig('c_ff.png')
flatui1 = ["#2ecc71", "#34495e", "#95a5a6", "#9b59b6", "#3498db", "#e74c3c",]
sns.set_palette(flatui1)
#fig, ax = plt.subplots(figsize=(15, 15))
# the size of A4 paper
#plt.figure(figsize=(20, 20))
fg2 = sns.FacetGrid(celldf, hue='POR', size=9, aspect=2.5)
fg2.map(plt.scatter, 'Experiment_ID', 'cellJsc', alpha=.7,)
plt.xlim(570,680)
#plt.xlim([datetime.date(2015, 12, 5), datetime.date(2016, 5, 25)])
#plt.title("cell Jsc")
plt.ylim(22, 29)
plt.axhline(15.5, color='k', linestyle='--')
plt.grid(b=True, which='both', color='0.65',linestyle='-')
plt.legend()
plt.savefig('c_jsc.png')
flatui1 = ["#e74c3c", "#2ecc71", "#34495e", "#95a5a6", "#9b59b6", "#3498db", "#e74c3c",]
sns.set_palette(flatui1)
fg21 = sns.FacetGrid(celldf, hue='POR', size= 9, aspect=2.5)
fg21.map(plt.scatter, 'Experiment_ID', 'cellVoc', alpha=.7, )
plt.xlim(570,680)
#plt.xlim([datetime.date(2015, 12, 5), datetime.date(2016, 5, 25)])
#plt.title("module Voc")
plt.ylim(.76, .86)
#plt.axhline(15.5, color='k', linestyle='--')
plt.grid(b=True, which='both', color='0.65',linestyle='-')
plt.legend()
plt.savefig('c_voc.png')
flatui1 = ["#9b59b6","#3498db","#e74c3c", "#2ecc71", "#34495e", "#95a5a6", "#9b59b6", "#3498db", "#e74c3c",]
sns.set_palette(flatui1)
fg3 = sns.FacetGrid(celldf, hue='POR', size= 9, aspect=2.3)
fg3.map(plt.scatter, 'Experiment_ID', 'cellRs_norm', alpha=.7,)
plt.xlim(560,680)
plt.ylim(0,20.)
#plt.axhline(15.5, color='k', linestyle='--')
plt.grid(b=True, which='both', color='0.65',linestyle='-')
plt.legend()
plt.savefig('c_rs.png')
flatui1 = [ "#e74c3c","#34495e", "#95a5a6", "#9b59b6", "#3498db", "#e74c3c",]
sns.set_palette(flatui1)
fg31 = sns.FacetGrid(celldf, hue='POR', size= 9, aspect=2.3)
fg31.map(plt.scatter, 'Experiment_ID', 'cellRsh_norm', alpha=.7,)
plt.xlim(560,680)
plt.ylim(1e1, 1e8)
plt.yscale('log')
#plt.axhline(15.5, color='k', linestyle='--')
plt.grid(b=True, which='both', color='0.65',linestyle='-')
plt.legend()
plt.savefig('c_rsh.png')
print("latest 30 experiments, cell eff and ff data:")
import seaborn as sns
flatui = ["#3498db", "#e74c3c", "#2ecc71", "#95a5a6", "#34495e", "#9b59b6"]
sns.set(style='ticks')
sns.set_palette(flatui)
sns.set_context("poster", font_scale=1.5,)
#fig, ax = plt.subplots(figsize=(15, 15))
# the size of A4 paper
# create our boxplot which is drawn on an Axes object
plt.figure(2, figsize=(20,12))
plt.subplot(211)
bplot = sns.boxplot('Experiment_ID', 'percentEff', hue='POR', data=celldf, notch=True)
# We can call all the methods avaiable to Axes objects
#bplot.set_title(title, fontsize=20)
#bplot.set_xlabel('Experiment ID', fontsize=16)
bplot.set_ylabel('cell efficiency [%]', fontsize=16)
bplot.tick_params(axis='y', labelsize=12, which='minor')
bplot.set_ylim(0,20)
bplot.set_xlim(378.5,408.5)
plt.xticks(rotation=30)
plt.legend()
plt.savefig('c_box_eff.png')
plt.subplot(212)
bplot22 = sns.boxplot('Experiment_ID', 'percentFF', data=celldf, hue='POR', notch=True)
bplot22.set_xlabel('Experiment ID', fontsize=16)
bplot22.set_ylabel('cell FF [%]', fontsize=16)
bplot22.tick_params(axis='both', labelsize=12)
bplot22.set_ylim(50,80)
bplot22.set_xlim(378.5,408.5)
plt.savefig('c_box_ff.png')
#sns.despine(left=True)
plt.xticks(rotation=30)
#plt.legend()
plt.show()
print("latest 30 experiments, cell jsc and voc data:")
sns.set(style='ticks')
flatui1 = ["#2ecc71", "#34495e", "#95a5a6", "#9b59b6", "#3498db", "#e74c3c",]
sns.set_palette(flatui1)
sns.set_context("poster", font_scale=1.5,)
plt.figure(2, figsize=(20,12))
plt.subplot(211)
bplot21 = sns.boxplot('Experiment_ID', 'cellJsc', hue='POR', data=celldf, notch=True)
#bplot.set_title(title, fontsize=20)
#bplot.set_xlabel('Experiment ID', fontsize=16)
bplot21.set_ylabel('Cell Jsc [$ma/cm^2$]', fontsize=16)
bplot21.tick_params(axis='both', labelsize=12)
bplot21.set_ylim(22,30)
bplot21.set_xlim(355.5,405.5)
plt.xticks(rotation=30)
#bplot.legend()
plt.savefig('c_box_j.png')
plt.subplot(212)
bplot2 = sns.boxplot('Experiment_ID', 'cellVoc', data=celldf, hue='POR', notch=True)
bplot2.set_xlabel('Experiment ID', fontsize=16)
bplot2.set_ylabel('Cell Voc [V]', fontsize=16)
bplot2.tick_params(axis='both', labelsize=12)
bplot2.set_ylim(0.6,0.9)
bplot2.set_xlim(355.5,405.5)
plt.savefig('c_box_v.png')
#sns.despine(left=True)
plt.xticks(rotation=30)
plt.legend(loc='lower right')
plt.show()
cds = pd.DataFrame(trends[trends.Cell_Count >= 22])
cds = cds[~cds['Measurement'].str.contains('.*Dark.*', na = False)]
cds = cds.replace([np.inf, -np.inf], np.nan)
cds = pd.merge(cds, xrf, left_on='Sample ID', right_on='Sample')
cds['CdTe_Tool'] = '1'
mask1 = cds["CdTe 2 Tool"].str.contains('.*TANK.*', na=False)
cds.loc[:,'CdTe_Tool'][mask1] = '2'
print("module trends table:")
#qgrid.show_grid(cds, show_toolbar=True, grid_options={'forceFitColumns': False, 'defaultColumnWidth': 150})
grid = qgrid.QGridWidget(df=moddf,show_toolbar=True, grid_options={'forceFitColumns': False, 'defaultColumnWidth': 150})
display(grid)
list(cds.columns.values)
cdstrimmed = pd.DataFrame(cds.drop(cds.columns[[9]], axis=1)
cdstrimmed.head()
print("unfiltered module stats:")
cds.describe()
#uncomment below to send full trends df to excel
#from xlsxwriter.utility import xl_rowcol_to_cell
#writer_orig = pd.ExcelWriter('db.xlsx', engine='xlsxwriter')
#%time cds.to_excel(writer_orig, index=False, sheet_name='all')
#writer_orig.save()
#print('Exported to db.xlsx.')
sns.set_palette("husl")
sns.set_context("poster", font_scale=1.5,)
fg = sns.FacetGrid(cds, hue='CdS Tool', size= 9, aspect=2.4)#, col='CdS Tool')
fg.map(plt.scatter, 'Date_tm', 'CdS Thickness (nm)', alpha=.6,)
#plt.xlim(550,650)
plt.xlim([datetime.date(2015, 7, 1), datetime.date(2016, 7, 1)])
plt.ylim(20, 100)
#plt.axhline(15.5, color='k', linestyle='-')
plt.title("CdS thickness by tool")
plt.grid(b=True, which='both', color='0.65',linestyle='-')
plt.legend(loc="lower right")
plt.savefig('cds_thickvtime.png')
sns.set_palette("bright")
fg1 = sns.FacetGrid(cds, hue='CdS Tool', size= 9, aspect=2.4)#, col='CdS Tool')
fg1.map(plt.scatter, 'CdS Thickness (nm)', 'percentEff',alpha=.6,)
plt.xlim(50,100)
#plt.xlim([datetime.date(2015, 7, 1), datetime.date(2016, 7, 1)])
plt.ylim(10, 18)
plt.axhline(15.5, color='k', linestyle='-')
plt.title("CdS thickness v eff")
plt.grid(b=True, which='both', color='0.65',linestyle='-')
plt.legend()
plt.savefig('cds_thickveff.png')
sns.set_context("poster", font_scale=1.5,)
fg = sns.FacetGrid(cds, size= 9, aspect=2.4, hue='CdTe_Tool') #col='CdS Tool'
fg.map(plt.scatter,'Date_tm','Cd_Concentration', alpha=.6,)
#plt.xlim(50,54)
plt.xlim([datetime.date(2015, 12, 31), datetime.date(2016, 6, 25)])
plt.ylim(48, 54)
#plt.axhline(15.5, color='k', linestyle='-')
plt.grid(b=True, which='both', color='0.65',linestyle='-')
plt.title("Cd conc")
plt.legend()
plt.savefig('cdte_cdvtime.png')
fg2 = sns.FacetGrid(cds, size= 9, aspect=2.4, hue='CdTe_Tool') #col='CdS Tool'
fg2.map(plt.scatter,'Date_tm','Te_Concentration', alpha=.6,)
#plt.xlim(50,54)
plt.xlim([datetime.date(2015, 12, 31), datetime.date(2016, 6, 25)])
plt.ylim(46, 50)
plt.title("Te conc")
#plt.axhline(15.5, color='k', linestyle='-')
plt.grid(b=True, which='both', color='0.65',linestyle='-')
plt.legend()
plt.savefig('cdte_teveff.png')
fg1 = sns.FacetGrid(cds, size= 9, aspect=2.4, hue='CdTe_Tool') #col='CdS Tool'
fg1.map(plt.scatter,'Cd_Concentration','percentEff', alpha=.6,)
plt.xlim(50,54)
plt.ylim(10, 17)
plt.title("Cd conc v. eff")
#plt.axhline(15.5, color='k', linestyle='-')
plt.grid(b=True, which='both', color='0.65',linestyle='-')
plt.legend()
plt.savefig('cdte_cdveff.png')
fg4 = sns.FacetGrid(cds, size= 9, aspect=2.4, hue='CdTe_Tool') #col='CdS Tool'
fg4.map(plt.scatter,'Cd_Concentration','Voc', alpha=.6,)
plt.xlim(50,54)
plt.ylim(0.7, 0.9)
plt.title("Cd conc v. voc")
#plt.axhline(15.5, color='k', linestyle='-')
plt.grid(b=True, which='both', color='0.65',linestyle='-')
plt.legend()
plt.savefig('cdte_cdvvoc.png')
cells = celldf.drop(['Eff', 'NumCells', 'FF', 'I0_nA', 'n', 'Pmp_fit_ratio'], axis=1)
cells = cells[~cells['Measurement'].str.contains('.*Dark.*', na = False)]
cells.head()
mods = moddf.drop(['Eff', 'NumCells', 'FF', 'I0_nA', 'n', 'Pmp_fit_ratio'], axis=1)
mods = mods[~mods['Measurement'].str.contains('.*Dark.*', na = False)]
mods.head()
groupmoddf = mods.groupby('Experiment_ID', as_index=False)
modmedian = groupmoddf.median()
modmean = groupmoddf.mean()
groupcelldf = cells.groupby('Experiment_ID', as_index=False)
cellmedian = groupcelldf.median()
cellmean = groupcelldf.mean()
print("cell median trends table:")
qgrid.show_grid(cellmedian, show_toolbar=True, grid_options={'forceFitColumns': False, 'defaultColumnWidth': 100})
b = pd.DataFrame(moddf.groupby(['Experiment_ID'], as_index=False)['shunt_count'].sum())
b.sort_values(by='Experiment_ID')
b.head()
plt.figure(figsize=(15, 8))
sns.barplot(x='Experiment_ID', y='shunt_count', data=b)
plt.xlim(367.5, 407.5)
plt.ylim(0,30)
plt.title("mean shunted modules by exp")
#plt.xticks(rotation=30)